문서의 임의 삭제는 제재 대상으로, 문서를 삭제하려면 삭제 토론을 진행해야 합니다. 문서 보기문서 삭제토론 인텔 P6 마이크로아키텍처 (문단 편집) ==== 특징 및 변천사 ==== * Pentium Pro: 코어 레벨 (P5 대비) * 프론트 엔드/백 엔드 공통 * 마이크로옵(micro operation, uop) 도입 - P6의 마이크로옵은 RISC와 비슷하게 load/store 방식을 사용한다. - 레지스터 사이의 단순한 연산은 하나의 마이크로옵으로 처리된다. - load는 하나의 마이크로옵으로 처리된다. - store는 address 및 data로 나뉘어 2개의 마이크로옵으로 처리된다. - 인텔에 따르면 x86 명령어당 평균적으로 1.5-2.0 uops로 변환된다고 한다. * 프론트 엔드 * 분기 예측기 개선 * 분기 대상 버퍼(Branch Target Buffer, BTB)가 256 → 512 엔트리로 증가 (2배) * 명령어 캐시의 associativity가 2-way → 4-way로 증가 * 전작인 P5와 달리 split fetching을 지원하지 않고 정렬된 16바이트 단위로만 명령어를 인출한다. * 디코더가 2개 → 3개로 증가 - 첫 번째 디코더는 모든 명령어를 지원하며 사이클당 최대 4개의 마이크로옵을 생성할 수 있다. - 첫번째 디코더를 제외한 나머지 디코더는 '단순'(simple) 디코더로, 지원하는 명령어가 제한되며 사이클당 1개의 마이크로옵만 생성할 수 있다. * 백 엔드 * [[비순차적 실행]](Out-of-Order Execution)과 추측 실행(Speculative Execution) 방식 도입. - 이로 인해 성능이 크게 향상됐다. 하지만 이로 인해 인텔 CPU에 [[CPU 게이트|멜트다운 보안 취약점]]이 있다는 것이 2018년 드러나게 된다. * 40 엔트리 크기의 재정렬 버퍼(reorder buffer, ROB) 추가 - uop의 실행 결과는 ROB에 저장되며 retire 단계에서 실제 레지스터 파일(real register file, RRF)에 기록된다. * 20 uops 크기의 예약소(reservation system, RS) 추가 - 사이클당 최대 5개의 uop을 실행 유닛에 전송 가능 * 정수 곱셈 및 나눗셈 연산의 레이턴시 및 처리량 개선 * 메모리 서브 시스템 * 비순차적 메모리 접근, nonblocking data cache * 데이터 캐시의 크기는 8KB로 동일, 레이턴시는 3사이클로 증가 * 데이터 캐시를 4개의 뱅크로 나누어 동시에 접근할 수 있도록 함 (사이클당 최대 1 load+1 store, 동일 사이클에 동일 뱅크에 load와 store를 동시에 수행할 수 없음) * 물리 주소 확장(Physical Address Extension, PAE) 기능 도입. - 물리 주소가 36비트로 확장되어 최대 64GB의 메모리를 사용 할 수 있게 되었다. - 이 기능을 사용하기 위해서는 메인보드 칩셋과 운영 체제도 지원해야 한다. - 이는 저가형 프로세서인 셀러론에는 적용되지 않음 * 기타 * 명령어 파이프라인이 기존의 5단계에서 12단계로 크게 증가하였다. * CMOV, FCMOV, FCOMI/FCOMIP/FUCOMI/FUCOMIP, RDPMC, UD2 명령어 추가 * 펜티엄 프로에서는 32비트 실행 성능만 고려하여 기존 16비트 코드의 세그멘테이션, partial register, 정렬되지 않은(unaligned) 메모리 접근 등에 대해 별도의 최적화를 하지 않았기 때문에 레거시 16비트 코드 실행 시 성능상의 문제가 존재하였다. - 세그먼트 레지스터를 변경하는 명령어는 마이크로코드를 통해 실행되었고 추측 실행을 지원하지 않아 직렬화를 동반하였기 때문에 수십 사이클이 소요되었는데, 세그먼트당 메모리 크기의 제약 및 x86의 적은 레지스터 수 등으로 인해 세그먼트 레지스터를 변경하는 명령어가 사용되는 경우가 많았다. - [[인텔 8080|8080]]의 영향으로 8086의 16비트 레지스터는 8비트 레지스터 2개로 나눌 수 있었는데, 이 점을 이용한 일부 어셈블리 코드에서는 레지스터의 일부분(예: AL, AH)이 ROB 상에 쪼개져 있을 때 전체 레지스터(예: AX)의 값을 읽는 경우도 있었다. 이러한 상황에서는 레지스터의 각 부분이 RRF에서 합쳐질 때까지 대기하였기 때문에(partial register stall) 성능 저하가 발생하였다. - 정렬되지 않은 로드의 경우 2개의 캐시 라인에 걸쳐있기 때문에 스토어 버퍼[* 메모리 접근이 비순차적으로 이뤄지므로 완료되지 않은 스토어의 값을 로드 명령어가 읽어야 하는 경우가 존재한다.]에 존재하는 메모리 주소를 확인하는 작업이 복잡해지는데 이러한 경우 단순하게 이전의 모든 명령어의 실행이 완료될 때까지 대기하였기 때문에 상당한 페널티를 수반하였다. 2-way → 3-way로의 확장과 비순차적 실행의 도입으로 SPECint92 기준 P5 대비 클럭당 성능이 40% 향상되었다. 그러나 1995년 처음 채택된 [[펜티엄 프로]]는 레거시 [[16비트]] 프로그램들의 실행 성능이 형편없었던 탓에 일반 사용자 시장에선 거의 묻혀져, 1997년 5월에 16비트 실행 성능이 보강된 [[인텔 펜티엄II 시리즈|펜티엄II]]부터 일반 시장에 알려지게 되었다. * Pentium II/III: 코어 레벨 (Pentium Pro 대비) * 프론트 엔드 * 명령어 캐시의 용량이 8 KB → 16 KB로 증가 * 백 엔드 * SIMD 유닛 추가 (MMX: 펜티엄 II, SSE: 펜티엄 III) * 16비트 실행 성능 향상 - 세그먼트 레지스터를 변경하는 명령어에 대한 추측 실행 지원 - partial register에 대한 일부 경우 최적화 * 메모리 서브 시스템 * 데이터 캐시의 용량이 8 KB → 16 KB로 증가 * 데이터 캐시의 associativity가 2-way → 4-way로 증가 * 기타 * MMX 명령어 추가 (펜티엄 II 클라매스부터) * FXSAVE, FXRSTOR 명령어 추가 (펜티엄 II 데슈츠부터) * [[SSE]] 명령어 추가 (펜티엄 III 카트마이부터) 1999년 2월 [[인텔 펜티엄III 시리즈|펜티엄III]]부터 SSE를 도입하고, 10월에 180nm로 공정 미세화 되면서 클럭을 본격적으로 끌어 올렸다. 하지만 당시 AMD가 [[AMD K7 마이크로아키텍처|K7 마이크로아키텍처]]를 내놓고 2000년 3월에 1 GHz를 먼저 돌파하게 되자, 인텔도 덩달아 1 GHz 제품을 발매하면서 1 GHz를 돌파한 인텔의 첫 마이크로아키텍처가 되었다. 1 GHz만으로는 만족할 수 없었는지 클럭을 무리하게 더 끌어 올려 1133 MHz인 펜티엄 3 1133까지 내놓았으나, 치명적인 불안정성 문제로 리콜되는 등 P6의 말년은 초라해졌다. 위기 의식을 느낀 인텔은 P6가 더 이상 클럭을 올릴 수 없는 한계에 도달했음을 깨닫게 되고 [[인텔 넷버스트 마이크로아키텍처|넷버스트 마이크로아키텍처]]를 개발해 [[펜티엄 4]]를 출시하기에 이르렀다.저장 버튼을 클릭하면 당신이 기여한 내용을 CC-BY-NC-SA 2.0 KR으로 배포하고,기여한 문서에 대한 하이퍼링크나 URL을 이용하여 저작자 표시를 하는 것으로 충분하다는 데 동의하는 것입니다.이 동의는 철회할 수 없습니다.캡챠저장미리보기